package com.example.demo.mapper;

import com.example.demo.entity.NewTaskFlow;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

@Mapper
public interface NewTaskFlowMapper {

    /**
     * 插入任务流程关系
     */
    int insert(NewTaskFlow newTaskFlow);

    /**
     * 根据ID查询任务流程关系
     */
    NewTaskFlow selectById(@Param("id") Long id);

    /**
     * 分页查询任务流程列表
     */
    List<NewTaskFlow> selectPage(@Param("offset") int offset, 
                               @Param("size") int size, 
                               @Param("taskId") Long taskId, 
                               @Param("flowId") Long flowId);

    /**
     * 统计任务流程总数
     */
    long count(@Param("taskId") Long taskId, 
              @Param("flowId") Long flowId);

    /**
     * 更新任务流程关系
     */
    int updateById(NewTaskFlow newTaskFlow);

    /**
     * 删除任务流程关系
     */
    int deleteById(@Param("id") Long id);

    /**
     * 根据任务ID和流程ID查询
     */
    NewTaskFlow selectByTaskIdAndFlowId(@Param("taskId") Long taskId, 
                                      @Param("flowId") Long flowId);

    /**
     * 根据任务ID查询所有关联的流程
     */
    List<NewTaskFlow> selectByTaskId(@Param("taskId") Long taskId);

    /**
     * 根据流程ID查询所有关联的任务
     */
    List<NewTaskFlow> selectByFlowId(@Param("flowId") Long flowId);

    /**
     * 查询指定数据源的未分发任务流程关系
     */
    List<NewTaskFlow> selectUndistributedByDataSourceId(@Param("dataSourceId") Long dataSourceId);

    /**
     * 根据流程ID查询未分发的任务流程关系
     */
    List<NewTaskFlow> selectUndistributedByFlowId(@Param("flowId") Long flowId);

    /**
     * 批量更新任务流程关系的分发状态
     */
    int batchUpdateDistributedStatus(@Param("ids") List<Long> ids, @Param("isDistributed") Boolean isDistributed);
}